package com.ruyuan2020.im.design.ChainOfResponsibilityPattern;


import com.ruyuan2020.im.design.ChainOfResponsibilityPattern.domain.Address;
import com.ruyuan2020.im.design.ChainOfResponsibilityPattern.domain.Payment;
import com.ruyuan2020.im.design.ChainOfResponsibilityPattern.domain.User;

/**
 * 在上面的代码中，OrderValidator 类负责处理订单提交前的所有验证逻辑，s
 * ubmitOrder 方法中依次调用了用户验证、支付方式验证和配送地址验证方法，如果任何一个验证失败，方法都会立即返回错误信息，只有当所有验证都通过时，才会返回成功信息。
 *
 * client代码创建了一个订单验证器实例，并尝试使用不同的用户提交订单，第一次提交使用有效用户，因此成功，第二次提交使用无效用户（null），因此失败，并返回相应的错误信息。
 *
 * 这种方式的问题是，如果需要添加新的验证逻辑（比如库存验证），必须修改 submitOrder 方法，
 * 这违反了开闭原则（对扩展开放，对修改关闭），此外，如果验证逻辑变得复杂，submitOrder 方法会变得非常庞大和难以维护。
 */
public class Client {
    public static void main(String[] args) {
        OrderValidator validator = new OrderValidator();

        // 创建用户、支付方式和配送地址对象
        User user = new User(true); // 假设已经认证
        Payment payment = new Payment(true); // 假设可用
        Address address = new Address(true); // 假设有效

        // 提交订单并打印结果
        String result = validator.submitOrder(user, payment, address);
        System.out.println(result); // 输出：订单提交成功！

        // 尝试使用无效的用户提交订单
        User invalidUser = null; // 无效用户
        String invalidUserResult = validator.submitOrder(invalidUser, payment, address);
        System.out.println(invalidUserResult); // 输出：用户身份验证失败！
    }
}
